package com.combetter.changxing.bluetooth;


/**
 * Created by Mark.fan on 2018/6/28.
 */

public class FacilityClient {
//    private static FacilityClient mClient;
//    //香烟抽吸数据
//    private List<Cigarette> cigarettes = new ArrayList<>();
//
//    public static FacilityClient getClient() {
//        if (mClient == null) {
//            synchronized (FacilityClient.class) {
//                if (mClient == null) {
//                    mClient = new FacilityClient();
//                }
//            }
//        }
//        return mClient;
//    }
//
//    public static BleDevice bleDevices;
//    public static BleDevice tempBleDevices;
//
//    private boolean mIsAuthAfter = false;
//
//    //蓝牙UUID
//    /**
//     * 进行通信的服务UUID
//     */
//    public final static String SERVICE_UUID = "00010203-0405-0607-0809-0a0b0c0d1910";
//    /**
//     * notify or read UUID
//     */
//    public final static String CHAR_READ_UUID = "00010203-0405-0607-0809-0a0b0c0d2b10";
//    /**
//     * write and no response UUID
//     */
//    public final static String CHAR_WRITE_UUID = "00010203-0405-0607-0809-0a0b0c0d2b11";
//    public final static String DESC_UUID = "00002902-0000-1000-8000-00805f9b34fb";
//
//    /**
//     * 发送原始字符
//     * 返回状态，0：成功；1：错误
//     */
//    public final static byte[] REQUEST_ORIENT_CAHR = new byte[]{(byte) 0x31, (byte) 0x32, (byte) 0x33, (byte) 0x34, (byte) 0x35, (byte) 0x36, (byte) 0x00};
//
//    /**
//     * 获取md5加密码后，0，2，4，5，6，6上的位置
//     */
//    public static byte[] REQUEST_SPACHIL_CHAR = new byte[]{(byte) 0x00, (byte) 0x02, (byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x06};
//
//    /**
//     * 状态，0：成功；1：错误；
//     */
//    public final static byte CMD_RESPONSE_STATU = (byte) 0x01;
//
//    /**
//     * 发送md5原始字符
//     */
//    public final static byte CMD_REQUEST_RAW_STR = (byte) 0x02;
//
//    /**
//     * 发送md5加密后的字符
//     */
//    public final static byte CMD_REQUEST_MD5_STR = (byte) 0x03;
//
//    /**
//     * 返回md5加密后字符
//     */
//    public final static byte CMD_RESPONSE_MD5_STR = (byte) 0x04;
//
//    /**
//     * 获取md5原始字符
//     */
//    public final static byte CMD_REQUEST_RAW_STR2 = (byte) 0x05;
//
//    /**
//     * 返回md5原始字符
//     */
//    public final static byte CMD_RESPONSE_RAW_STR2 = (byte) 0x06;
//
//    /**
//     * 发送运算后的md5字符
//     */
//    public final static byte CMD_SEND_MDT_STR = (byte) 0x07;
//
//    /**
//     * 发送香烟类型编号
//     */
//    public final static byte CMD_SEND_TYPE_NUMBER = (byte) 0x08;
//
//    /**
//     * 获取设备的香烟抽吸数据
//     */
//    public final static byte CMD_REQUEST_TYPE = (byte) 0x09;
//
//    /**
//     * 返回设备的香烟抽吸数据
//     */
//    public final static byte CMD_RESPONSE_TYPE = (byte) 0x0A;
//
//    /**
//     * 确定设备的香烟抽吸数据发送完成
//     */
//    public final static byte GET_SUCCESS = (byte) 0x1C;
//
//    /**
//     * 发送确定收到香烟抽吸数据完成
//     */
//    public final static byte SEND_SUCCESS = (byte) 0x1D;
//
//    /**
//     * 清除设备的吸烟口数
//     */
//    public final static byte CMD_CLEAR_MOUTH_COUNT = (byte) 0x0B;
//
//    /**
//     * 获取设备的吸烟口数
//     */
//    public final static byte CMD_REQUEST_MOUTH_COUNT = (byte) 0x0C;
//
//    /**
//     * 返回设备的吸烟口数
//     */
//    public final static byte CMD_RESPONSE_MOUTH_COUNT = (byte) 0x0D;
//
//    /**
//     * 清除设备的吸烟只数
//     */
//    public final static byte CMD_CLEAN_ONLY_NUM = (byte) 0x0E;
//
//    /**
//     * 获取设备的吸烟只数
//     */
//    public final static byte CMD_REQUEST_ONLY_NUM = (byte) 0x0F;
//
//    /**
//     * 返回设备的吸烟只数
//     */
//    public final static byte CMD_RESPONSE_ONLY_NUM = (byte) 0x10;
//
//    /**
//     * 获取设备剩余电量值
//     */
//    public final static byte CMD_REQUEST_BATTERY = (byte) 0x11;
//
//    /**
//     * 返回设备剩余电量值
//     */
//    public final static byte CMD_RESPONSE_BATTERY = (byte) 0x12;
//
//    /**
//     * 发送设备名称
//     */
//    public final static byte CMD_SEND_NAME = (byte) 0x13;
//
//    /**
//     * 发送发热温度微调值
//     */
//    public final static byte CMD_SEND_FEVER = (byte) 0x14;
//
//    /**
//     * 发送加热时间微调值
//     */
//    public final static byte CMD_SEND_WARM_TIME = (byte) 0x15;
//
//    /**
//     * 发送预热时间微调值
//     */
//    public final static byte CMD_PREHEAT_TIME = (byte) 0x16;
//
//    /**
//     * 发送日期和时间值
//     */
//    public final static byte CMD_SEND_DATE = (byte) 0x17;
//    /**
//     * 获取预热时间
//     */
//    public final static byte CMD_PREHEAT = (byte) 0x18;
//    /**
//     * 返回预热时间和加热温度
//     */
//    public final static byte CMD_GET_PREHEAT = (byte) 0x19;
//    /**
//     * 发送命令获取版本号
//     */
//    public final static byte CMD_VERSION = (byte) 0x1A;
//    /**
//     * 设备返回版本号
//     */
//    public final static byte CMD_GET_VERSION = (byte) 0x1B;
//    /**
//     * 发送烟名称给设备展示
//     */
//    public final static byte CMD_SEND_CIG_NAME = (byte) 0x1E;
//
//    public boolean mConnected;
//
//    /**
//     * 未鉴权
//     */
//    public final static int AUTH_NONE = -1;
//
//    /**
//     * 鉴权成功
//     */
//    public final static int AUTH_SUCCESS = 0;
//
//    /**
//     * 鉴权中
//     */
//    public final static int AUTH_STARTING = 1;
//
//    /**
//     * 鉴权状态
//     */
//    public static int mAuthStatu = AUTH_NONE;
//
//    private static int CMD_CURRENT_ORDER = (byte) 0x00;//当前发送的命令
//
//
//    public static int mConnectState = BluetoothGatt.STATE_DISCONNECTED;
//
//
//    /**
//     * 获取设备的香烟抽吸数据
//     */
//    public void getCigaretteTypeData() {
//        BleWrite(bleDevices, generateCmd(CMD_REQUEST_TYPE, null));
//    }
//
//    /********************************  发送给设备的命令 ***********************************/
//
//    /**
//     * 发送手机时间给设备
//     */
//    public void sendDate() {
//        int year = Integer.parseInt(DateUtils.getCurTime("yyyy"));
//        int month = Integer.parseInt(DateUtils.getCurTime("MM"));
//        int day = Integer.parseInt(DateUtils.getCurTime("dd"));
//        int hour = Integer.parseInt(DateUtils.getCurTime("HH"));
//        int minute = Integer.parseInt(DateUtils.getCurTime("mm"));
//        int second = Integer.parseInt(DateUtils.getCurTime("ss"));
//        byte[] data = new byte[]{(byte) year, (byte) 0x07, (byte) month, (byte) day, (byte) hour, (byte) minute, (byte) second};
//        BleWrite(bleDevices, generateCmd(CMD_SEND_DATE, data));
//    }
//
//    /**
//     * 获得设备电量
//     */
//    public void getElectric() {
//        BleWrite(bleDevices, generateCmd(CMD_REQUEST_BATTERY, null));
//    }
//
//    /**
//     * 获取预热时间和加热温度
//     */
//    public void getPreheatDate() {
//        BleWrite(bleDevices, generateCmd(CMD_PREHEAT, null));
//    }
//
//    /**
//     * 发送确定收到香烟抽吸数据完成
//     */
//    public void sendSuccess() {
//        BleWrite(bleDevices, generateCmd(SEND_SUCCESS, null));
//    }
//
//    /**
//     * 获取设备版本
//     */
//    public void getVersion() {
//        BleWrite(bleDevices, generateCmd(CMD_VERSION, null));
//    }
//
//    /**
//     * 发送发热温度微调值
//     */
//    public void sendFever(byte[] data) {
//        CMD_CURRENT_ORDER = CMD_SEND_FEVER;
//        BleWrite(bleDevices, generateCmd(CMD_SEND_FEVER, data));
//    }
//
//    /**
//     * 发送加热时间微调值
//     */
//    public void sendWarm(byte[] data) {
//        BleWrite(bleDevices, generateCmd(CMD_SEND_WARM_TIME, data));
//    }
//
//    /**
//     * 发送预热时间微调值
//     */
//    public void sendPreheat(byte[] data) {
//        CMD_CURRENT_ORDER = CMD_PREHEAT_TIME;
//        BleWrite(bleDevices, generateCmd(CMD_PREHEAT_TIME, data));
//    }
//
//    /**
//     * 发送设备名称
//     */
//    public void sendName(byte[] data) {
//        BleWrite(bleDevices, generateCmd(CMD_SEND_NAME, data));
//    }
//
//    /**
//     * 发送香烟类型编号0C
//     */
//    public void cutCmoke(byte[] data, byte[] data0) {
//        //发送索引号
//        BleWrite(bleDevices, generateCmd(CMD_SEND_TYPE_NUMBER, data));
//        //香烟名称
//        Observable.timer(500, TimeUnit.MILLISECONDS).subscribe(aLong ->
//                BleWrite(bleDevices, generateCmd(CMD_SEND_CIG_NAME, data0)));
//    }
//
//    /**
//     * 鉴权完成后的操作
//     */
//    public void authentication(boolean isAuthAfter) {
//        //获得电量
//        getElectric();
//        //获取预热时间和加热温度
//        Observable.timer(1000, TimeUnit.MILLISECONDS).subscribe(aLong -> getPreheatDate());
//        //版本号
//        Observable.timer(2000, TimeUnit.MILLISECONDS).subscribe(aLong -> getVersion());
//        //发送日期
//        Observable.timer(3000, TimeUnit.MILLISECONDS).subscribe(aLong -> sendDate());
//        if (!isAuthAfter) {
//            //获取设备的香烟抽吸数据
//            Observable.timer(4000, TimeUnit.MILLISECONDS).subscribe(aLong -> getCigaretteTypeData());
//        }
//    }
//
//    /********************************  蓝牙操作 ***********************************/
//    /**
//     * 连接蓝牙
//     *
//     * @param mac
//     */
//    public void connect(String mac, boolean specialDeal) {
//        LogUtil.e("Mac:   " + mac);
//        BleManager.getInstance().connect(mac, new BleGattCallback() {
//            @Override
//            public void onStartConnect() {
//                // 开始连接
//                LogUtil.e("开始连接");
////                if (tempBleDevices == null) {
////                    ToastUtils.showToastShort("开始连接");
////                }
//            }
//
//            @Override
//            public void onConnectFail(BleDevice bleDevice, BleException exception) {
//                mConnectState = BluetoothGatt.STATE_DISCONNECTED;
//                // 连接失败
//                if (tempBleDevices == null) {
//                    ToastUtils.showToastShort("蓝牙连接失败,请重试连接");
//                    mHandler.removeMessages(1);
//
//                }
//                LogUtil.e("蓝牙连接失败  code：" + exception.getCode() + "  message: " + exception.getDescription());
////                Facility facility = MyApp.getInstance().getFacilityInfo();
////                if (facility != null) {
////                    MyApp.getInstance().resetFacilityInfo();
////                }
//                mAuthStatu = AUTH_NONE;
//                bleDevices = null;
//                mIsAuthAfter = false;
//                EventBus.getDefault().post(new EventMessage("onDisConnected", ""));
//            }
//
//            @Override
//            public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
//                // 连接成功，BleDevice即为所连接的BLE设备
//                ToastUtils.showToastShort("蓝牙连接成功");
//
//
//                mConnectState = BluetoothGatt.STATE_CONNECTED;
//                bleDevices = bleDevice;
//                tempBleDevices = bleDevice;
//                Observable.timer(1000, TimeUnit.MILLISECONDS).subscribe(aLong -> {
//                    BleNotify(bleDevice,specialDeal);
//                });
//
//            }
//
//            @Override
//            public void onDisConnected(boolean isActiveDisConnected, BleDevice bleDevice, BluetoothGatt gatt, int status) {
//                // 连接中断，isActiveDisConnected表示是否是主动调用了断开连接方法
//                LogUtil.e("主动断开与否  " + isActiveDisConnected);
////                ToastUtils.showToastShort("设备已断开");
//                mConnectState = BluetoothGatt.STATE_DISCONNECTED;
//                mAuthStatu = AUTH_NONE;
//                bleDevices = null;
//                mIsAuthAfter = false;
//                MyApp.getInstance().resetFacilityInfo();
//                EventBus.getDefault().post(new EventMessage("onDisConnected", ""));
//
//                if (tempBleDevices != null) {
//                    mHandler.removeMessages(1);
//                    mHandler.sendEmptyMessageDelayed(1, 3000);
//                }
//            }
//        });
//    }
//
//    public void disconnect() {
//        try {
//            mHandler.removeMessages(1);
//            LogUtil.e("--------断开了0" + bleDevices + ":   " + BleManager.getInstance().isConnected(bleDevices));
//            BleManager.getInstance().disconnect(bleDevices);
//            LogUtil.e("--------断开了1" + bleDevices + ":   " + BleManager.getInstance().isConnected(bleDevices));
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 蓝牙设备返回
//     *
//     * @param bleDevice
//     */
//    public void BleNotify(BleDevice bleDevice,boolean specialDeal) {
//        BleManager.getInstance().notify(bleDevice, SERVICE_UUID, CHAR_READ_UUID, new BleNotifyCallback() {
//            @Override
//            public void onNotifySuccess() {
//                // 打开通知操作成功
//                LogUtil.e("打开通知操作成功");
//                bleDevices = bleDevice;
//                tempBleDevices = bleDevice;
////                BleWrite(bleDevice, generateCmd(CMD_REQUEST_RAW_STR, REQUEST_CAHR));
//                sendAuth(bleDevice);
//            }
//
//            @Override
//            public void onNotifyFailure(BleException exception) {
//                // 打开通知操作失败
//                LogUtil.e("打开通知操作失败");
//                mHandler.removeMessages(1);
//            }
//
//            @Override
//            public void onCharacteristicChanged(byte[] data) {
//                // 打开通知后，设备发过来的数据将在这里出现
//                LogUtil.e("收到设备通知：" + printBytes(data));
////                if (data[3] == 0x02)
//
//                if (mAuthStatu == AUTH_SUCCESS) {
//                    disposeData(data);
//                } else {
//                    hanlderData(bleDevice, data,specialDeal);
//                }
//            }
//        });
//    }
//
//    /**
//     * 首次和定时鉴权
//     */
//    public void sendAuth(BleDevice bleDevice) {
//        int min = 1;
//        int max = 9;
//        Random random = new Random();
//        /**
//         * 发送原始字符
//         * 返回状态，0：成功；1：错误
//         */
//        byte[] REQUEST_CAHR = new byte[]{
//                (byte) (random.nextInt(max) % (max - min + 1) + min),
//                (byte) (random.nextInt(max) % (max - min + 1) + min),
//                (byte) (random.nextInt(max) % (max - min + 1) + min),
//                (byte) (random.nextInt(max) % (max - min + 1) + min),
//                (byte) (random.nextInt(max) % (max - min + 1) + min),
//                (byte) (random.nextInt(max) % (max - min + 1) + min),
//                (byte) (0x00)};
////        REQUEST_SPACHIL_CHAR = getSpacilMd5_6(REQUEST_CAHR);
//        BleWrite(bleDevice, generateCmd(CMD_REQUEST_RAW_STR, REQUEST_CAHR));
//        LogUtil.e("---鉴权第一步：" + printBytes(generateCmd(CMD_REQUEST_RAW_STR, REQUEST_CAHR)));
//        mHandler.sendEmptyMessageDelayed(0, 5 * 60 * 1000);
//    }
//
//    /**
//     * 发送信息给蓝牙设备
//     *
//     * @param bleDevice
//     * @param data
//     */
//    public void BleWrite(BleDevice bleDevice, byte[] data) {
//        BleManager.getInstance().write(bleDevice, SERVICE_UUID, CHAR_WRITE_UUID, data, new BleWriteCallback() {
//            @Override
//            public void onWriteSuccess(int current, int total, byte[] justWrite) {
//                // 发送数据到设备成功
//                LogUtil.e("发送数据到设备成功：" + printBytes(justWrite));
//
//            }
//
//            @Override
//            public void onWriteFailure(BleException exception) {
//                if (mConnectState == BluetoothGatt.STATE_CONNECTED && data.length >= 2 && (data[2] == (byte) 0x01 || data[2] == (byte) 0x03 || data[2] == (byte) 0x05 || data[2] == (byte) 0x07)) {
//                    mAuthStatu = AUTH_NONE;
//                    tempBleDevices = null;
//                    mHandler.removeMessages(0);
//                    mHandler.removeMessages(1);
//                    BleManager.getInstance().disconnect(bleDevice);
//                    ToastUtils.error("鉴权错误，已断开连接");
//                    EventBus.getDefault().post(new EventMessage("AuthFail", ""));
//                    LogUtil.e("------------鉴权出问题了: " + (data[2]));
//                }
//                // 发送数据到设备失败
//                LogUtil.e("发送数据到设备失败 ", exception);
//            }
//        });
//    }
//
//    private android.os.Handler mHandler = new android.os.Handler() {
//        @Override
//        public void handleMessage(Message msg) {
//            super.handleMessage(msg);
//            switch (msg.what) {
//                case 0:
//                    if (bleDevices != null) {
//                        mAuthStatu = AUTH_NONE;
//                        mHandler.removeMessages(0);
//                        sendAuth(bleDevices);
//                    } else {
//                        mHandler.removeMessages(0);
//                    }
//                    break;
//                case 1:
//                    if (tempBleDevices == null) {
//                        mHandler.removeMessages(1);
//                    } else {
//                        if (mConnectState == BluetoothGatt.STATE_CONNECTED) {
//                            mHandler.removeMessages(1);
//                        } else {
//                            FacilityDao facilityDao = MyApp.getInstance().getDatabase().facilityDao();
//                            if (facilityDao == null || facilityDao.getFacilityInfoList() == null) {
//                                Facility facility = new Facility();
//                                facility.setFacilityAddress(tempBleDevices.getMac());
//                                facility.setFacilityName(tempBleDevices.getName());
////                                facility.setTemperatureTrimming("0℃");
////                                facility.setTimeTrimming("0");
////                                facility.setFacilityVersion("");
////                                MyApp.getInstance().getDatabase().facilityDao().insertFacility(facility);
//                            }
//                            if (tempBleDevices != null) {
//                                connect(tempBleDevices.getMac(), true);
//                                mHandler.removeMessages(1);
//                                mHandler.sendEmptyMessageDelayed(1, 10000);
//                            }
//                        }
//                    }
//                    break;
//            }
//
//        }
//    };
//
//
//    /**
//     * 处理返回有数据的
//     *
//     * @param value
//     */
//    private void disposeData(byte[] value) {
//        if (value.length < 3) {
//            LogUtil.e("返回数据格式错误");
//            return;
//        }
//        byte[] data = null;
//        //传输格式为,0:起始字节；1：字节数量；2：命令；3~n:数据。
//        switch (value[2]) {
//            //设备返回电量
//            case CMD_RESPONSE_BATTERY:
//                LogUtil.e("打印返回设备返回电量： " + printBytes(value));
//                data = parseData2(value);
////                Facility facility0 = MyApp.getInstance().getFacilityInfo();
////                if (facility0 != null) {
////                    facility0.setElectricQuantity((int) data[0]);
////                    MyApp.getInstance().getDatabase().facilityDao().insertFacility(facility0);
////                }
//                EventBus.getDefault().post(new EventMessage("battery", ""));
//                break;
//            //返回预热时间和加热温度
//            case CMD_GET_PREHEAT:
//                data = parseData2(value);
////                LogUtil.e("打印返回预热时间和加热温度： " + printBytes(value));
//
//                ByteBuffer buf = ByteBuffer.wrap(value);
//                byte byte1 = buf.get();
//                byte byte2 = buf.get();
//                byte byte3 = buf.get();
//
//                byte byte4 = buf.get();
//
//                short byte56 = buf.getShort();
//
//                byte byte7 = buf.get();
//                short byte89 = buf.getShort();
//
////                Facility facility1 = MyApp.getInstance().getFacilityInfo();
////                if (facility1 != null) {
////                    facility1.setPreheatingTime(String.valueOf(byte4));
////                    facility1.setPreheatingTemperature(String.valueOf(byte56));
////                    facility1.setHeatingTime(String.valueOf(byte7));
////                    facility1.setHeatingTemperature(String.valueOf(byte89));
////                    MyApp.getInstance().getDatabase().facilityDao().insertFacility(facility1);
////                }
//                EventBus.getDefault().post(new EventMessage("timeTemperature", ""));
//                break;
//            //设备返回版本号
//            case CMD_GET_VERSION:
//                LogUtil.e("设备返回版本号： " + printBytes(value));
//                data = parseData2(value);
//
//                String version = "";
//                for (int i = 0; i < data.length; i++) {
//                    version += ASCUtils.backchar(data[i]);
//                }
////                Facility facility = MyApp.getInstance().getFacilityInfo();
////                if (facility != null) {
////                    facility.setFacilityVersion(version);
////                    MyApp.getInstance().getDatabase().facilityDao().insertFacility(facility);
////                }
//                EventBus.getDefault().post(new EventMessage("Version", ""));
//
//                break;
//
//            //返回设备的香烟抽吸数据
//            case CMD_RESPONSE_TYPE:
//                List<String> list = new ArrayList<>();
//                List<String> list2 = new ArrayList<>();
//                for (int i = 0; i < value.length; i++) {
//                    if (i > 2 && i < 11) {
//                        if (i == 5) {
//                            String v = "7" + String.format("%02X", value[i]);
//                            int year = Integer.valueOf(v, 16);
//                            list.add(year + "");
//                        } else {
//                            list.add(value[i] + "");
//                        }
//                    }
//                    if (i > 10) {
//                        if (i == 13) {
//                            String v = "7" + String.format("%02X", value[i]);
//                            int year = Integer.valueOf(v, 16);
//                            list2.add(year + "");
//                        } else {
//                            list2.add(value[i] + "");
//                        }
//                    }
//                }
//                cigarettes.add(disposeCigarette(list));
//                cigarettes.add(disposeCigarette(list2));
//                break;
//
//            //确定设备的香烟抽吸数据发送完成
//            case GET_SUCCESS:
//                Map<String, String> map = new ArrayMap<>();
//                LogUtil.e("------gos:  " + new Gson().toJson(cigarettes).toString());
//                map.put("experience", new Gson().toJson(cigarettes));
//                EventBus.getDefault().post(new EventMessage("CigaretteData", map));
//                break;
//        }
//
//        /**
//         * 额外的判断设值
//         */
//        if (value.length >= 4) {
//            switch (value[3]) {
//                case 0x00:
//                    if (CMD_CURRENT_ORDER == CMD_SEND_FEVER) {
//                        EventBus.getDefault().post(new EventMessage("CMD_SEND_FEVER", ""));
//                    } else if (CMD_CURRENT_ORDER == CMD_PREHEAT_TIME) {
//                        EventBus.getDefault().post(new EventMessage("CMD_PREHEAT_TIME", ""));
//                    }
//                    CMD_CURRENT_ORDER = 0x00;
//                    break;
//            }
//        }
//
//    }
//
//    /**
//     * 处理设备返回的香烟抽吸数据
//     *
//     * @param list
//     * @return
//     */
//    public Cigarette disposeCigarette(List<String> list) {
//        Cigarette cigarette = new Cigarette();
//        cigarette.setUid(MyApp.getInstance().getUserInfo().getUid());
//        for (int i = 0; i < list.size(); i++) {
//            if (i < 2) {
//                String day = list.get(i);
//                if (day.length() == 1) {
//                    day = "0" + day;
//                }
//                cigarette.setIndexes(cigarette.getIndexes() == null ? day : cigarette.getIndexes() + day);
//            } else if (i < list.size() - 1) {
//                String day = list.get(i);
//                if (day.length() == 1) {
//                    day = "0" + day;
//                }
//                if (i < 5) {
//                    cigarette.setCtime(cigarette.getCtime() == null ? day : cigarette.getCtime() + "-" + day);
//                } else {
//                    cigarette.setCtime(i == 5 ? cigarette.getCtime() + " " + day : cigarette.getCtime() + ":" + day);
//                }
//            } else {
//                cigarette.setTimes(list.get(i));
//            }
//        }
//        return cigarette;
//    }
//
//    /**
//     * 鉴权
//     *
//     * @param value
//     */
//    private void hanlderData(BleDevice bleDevice, byte[] value,boolean specialDeal) {
//        if (value.length < 3) {
//            LogUtil.e("返回数据格式错误");
//            return;
//        }
//        //传输格式为,0:起始字节；1：字节数量；2：命令；3~n:数据。
//        switch (value[2]) {
//            case CMD_RESPONSE_STATU:
//                if (mAuthStatu == AUTH_STARTING && value[3] == (byte) 0x00) {
//                    mAuthStatu = AUTH_SUCCESS;
//                    if (specialDeal) {
//                        EventBus.getDefault().post(new EventMessage("BleSuccess", null));
//                    } else {
//                        EventBus.getDefault().post(new EventMessage("BleSuccess", bleDevice));
//                    }
//                    //鉴权完成后的操作
//                    authentication(mIsAuthAfter);
//                    mIsAuthAfter = true;
//                } else {
//                    mAuthStatu = AUTH_STARTING;
//                    BleWrite(bleDevice, generateCmd(CMD_REQUEST_MD5_STR, REQUEST_SPACHIL_CHAR));
//                }
//                break;
//            case CMD_RESPONSE_MD5_STR:
//                BleWrite(bleDevice, generateCmd(CMD_REQUEST_RAW_STR2, null));
//                break;
//            //发送运算后的md5字符
//            case CMD_RESPONSE_RAW_STR2:
//                byte[] data = parseData(value);
//                BleWrite(bleDevice, generateCmd(CMD_SEND_MDT_STR, getSpacilMd5(data)));
//                break;
//        }
//    }
//
//
//    /**
//     * 获取md5加密后，15/4/7/9/10/8/13/11位置的字符
//     *
//     * @param src
//     * @return
//     */
//    public byte[] getSpacilMd5(byte[] src) {
//        int len = 0;
//        byte[] dest = new byte[8];
//        byte[] md5 = getMd5(src);
//
//        dest[len++] = md5[15];
//        dest[len++] = md5[4];
//        dest[len++] = md5[7];
//        dest[len++] = md5[9];
//        dest[len++] = md5[10];
//        dest[len++] = md5[8];
//        dest[len++] = md5[13];
//        dest[len++] = md5[11];
//        return dest;
//    }
//
//    /**
//     * 获取md5加密后，0、2、4、5、6、6位置的字符
//     *
//     * @param src
//     * @return
//     */
//    public byte[] getSpacilMd5_6(byte[] src) {
//        int len = 0;
//        byte[] dest = new byte[6];
//        byte[] md5 = getMd5(src);
//
//        dest[len++] = md5[0];
//        dest[len++] = md5[2];
//        dest[len++] = md5[4];
//        dest[len++] = md5[5];
//        dest[len++] = md5[6];
//        dest[len++] = md5[6];
//        return dest;
//    }
//
//    /**
//     * 打印字节
//     *
//     * @param value
//     */
//    public String printBytes(byte[] value) {
//        StringBuilder sb = new StringBuilder();
//        for (int i = 0; i < value.length; i++) {
//            sb.append(String.format("%02X", value[i]) + " ");
//        }
//        return sb.toString();
//    }
//
//
//    /**
//     * 解析通讯里的数据
//     *
//     * @param value
//     * @return
//     */
//    public byte[] parseData(byte[] value) {
//        if (value == null || value.length < 4) {
//            LogUtil.e("数据格式不正确");
//            return null;
//        }
//        byte[] temp = new byte[value.length - 3];
//        System.arraycopy(value, 2, temp, 0, temp.length);
//        return temp;
//    }
//
//    /**
//     * 解析鉴权成功后的数据
//     *
//     * @param value
//     * @return
//     */
//    public byte[] parseData2(byte[] value) {
//        if (value == null || value.length < 4) {
//            LogUtil.e("数据格式不正确");
//            return null;
//        }
//        byte[] temp = new byte[value.length - 3];
//        System.arraycopy(value, 3, temp, 0, temp.length);
//        return temp;
//    }
//
//
//    public byte[] getMd5(byte[] src) {
//
//        StringBuilder sb = new StringBuilder();
//        for (int i = 0; i < src.length; i++) {
//            if (i == 0) {
//                continue;
//            }
//            sb.append((char) src[i]);
//        }
//        byte[] result = MD5Utils.MD5_32(sb.toString());
//        return result;
//    }
//
//    public byte[] generateCmd(byte cmd, byte[] data) {
//        // byte[] result = new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x11};
//        int dataLen = 3;
//        if (data != null) {
//            dataLen += data.length;
//        }
//        byte[] result = new byte[dataLen];
//        int len = 0;
//        result[len++] = (byte) 0xff;
//        if (data != null) {
//            result[len++] = (byte) (data.length + 1);
//        } else {
//            result[len++] = (byte) 0x01;
//        }
//        result[len++] = cmd;
//        if (data != null) {
//            for (byte b : data) {
//                result[len++] = b;
//            }
//        }
//        return result;
//    }
}
